package cn.mujiankeji.mbrowser.界面.组件.代码框

import androidx.compose.ui.graphics.Color
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.SpanStyle

/**
 * 代码节点数据类
 */
data class 代码节点(
    // 节点文本
    var 文本: AnnotatedString? = null,
    // 闭合标签文本
    var 结束文本: AnnotatedString? = null,
    // 子节点列表
    var 子节点列表: MutableList<代码节点>? = null,
    // 属性名
    var 属性名: String? = null,
    // 属性值
    var 属性值: Any? = null,
    // 父节点引用
    var 父节点: 代码节点? = null
)

/**
 * 代码项数据类，用于UI展示
 */
data class 代码项(
    // 显示的文本
    var 文本: AnnotatedString? = null,
    // 标识符，用于确定层级关系
    var 标识: String = "1",
    // 关联的节点数据
    var 节点: 代码节点,
    // 是否展开
    var 已展开: Boolean = false,
    // 是否是节点开始项
    var 是节点开始: Boolean = false,
    // 是否是节点结束项
    var 是节点结束: Boolean = false,
    // 是否被选中
    var 已选中: Boolean = false
)

/**
 * 代码颜色常量
 */
object 代码颜色 {
    // 黑暗模式颜色
    private val 黑暗模式标签 = Color(0xFF2196F3)      // 标签颜色
    private val 黑暗模式名称 = Color(0xFFF44336)      // 名称颜色
    private val 黑暗模式文本 = Color(0xFF4CAF50)      // 文本颜色
    private val 黑暗模式注释 = Color(0xFF9E9E9E)      // 消息/注释颜色
    private val 黑暗模式键 = Color(0xFFFF9800)        // 键颜色
    private val 黑暗模式值 = Color(0xFF673AB7)        // 值颜色
    private val 黑暗模式背景 = Color(0xFF121212)      // 背景颜色
    private val 黑暗模式选中背景 = Color(0xFF1F3D4C)  // 选中背景颜色
    
    // 明亮模式颜色
    private val 明亮模式标签 = Color(0xFF1976D2)      // 标签颜色
    private val 明亮模式名称 = Color(0xFFD32F2F)      // 名称颜色
    private val 明亮模式文本 = Color(0xFF388E3C)      // 文本颜色
    private val 明亮模式注释 = Color(0xFF757575)      // 消息/注释颜色
    private val 明亮模式键 = Color(0xFFE65100)        // 键颜色
    private val 明亮模式值 = Color(0xFF512DA8)        // 值颜色
    private val 明亮模式背景 = Color(0xFFFAFAFA)      // 背景颜色
    private val 明亮模式选中背景 = Color(0xFFE3F2FD)  // 选中背景颜色
    
    // 当前模式（默认为明亮模式）
    private var 是黑暗模式 = false
    
    // 获取当前模式的颜色
    val 标签: Color
        get() = if (是黑暗模式) 黑暗模式标签 else 明亮模式标签
    
    val 名称: Color
        get() = if (是黑暗模式) 黑暗模式名称 else 明亮模式名称
    
    val 文本: Color
        get() = if (是黑暗模式) 黑暗模式文本 else 明亮模式文本
    
    val 注释: Color
        get() = if (是黑暗模式) 黑暗模式注释 else 明亮模式注释
    
    val 键: Color
        get() = if (是黑暗模式) 黑暗模式键 else 明亮模式键
    
    val 值: Color
        get() = if (是黑暗模式) 黑暗模式值 else 明亮模式值
    
    val 背景: Color
        get() = if (是黑暗模式) 黑暗模式背景 else 明亮模式背景
    
    val 选中背景: Color
        get() = if (是黑暗模式) 黑暗模式选中背景 else 明亮模式选中背景
    
    // 文本颜色（根据背景自动选择）
    val 文本颜色: Color
        get() = if (是黑暗模式) Color.White else Color.Black
    
    // 设置模式
    fun 设置黑暗模式(黑暗模式: Boolean) {
        是黑暗模式 = 黑暗模式
    }
    
    // 获取当前模式
    fun 是否黑暗模式(): Boolean {
        return 是黑暗模式
    }
} 